package net.freestu.sola.web.spider.urlfilter;

import net.freestu.sola.web.global.GlobleVar;

public class WebFilter extends FilterDecorator {

	private String web;// 新浪就是sina.com百度就是baidu.com

	public WebFilter(LinkFilter linkfilter, String web) {

		super(linkfilter);// 在抽象类中进行构造对象。
		
		if(web.indexOf("$")==-1){
		   this.web = web.replaceFirst("www.", "");//这个地方you可能传递的是111.111.111.111$8080
		}else{
		   this.web=web.replace("$", ":");
		}
	}

	public void setState() {// 检测状态。对LinkFilter的状态进行设置。

		String str = linkfilter.getContent();// 获取URL。
		int state = linkfilter.getState();// 获取状态。

		if (state == URLFORBID) {// 如果不是不能通过的。

			linkfilter.setState(URLFORBID);
		}

		if (state == URLSTOP) {// 如果是处于暂停状态的。

			int temp = judgeState(str);
			linkfilter.setState(temp);
		}

		if (state == URLPASS) {// 如果是处于通过状态。

			// 这个地方需要再规范一下：
			//
			// Stop为全部设置为
			// forbie 为全部不通过。
			// pass 为全部通过。

			// ----------9.24删除----马上恢复//
			// int temp=judgeState(str);
			// linkfilter.setState(temp);
			// -------------------

			//int temp = judgeState(str);
			//linkfilter.setState(temp);

			linkfilter.setState(URLPASS);//至高无上的通行证

		}

	}

	/*
	 * str形如"http://www.cdut.edu.cn/xxx.jsp等的。
	 */
	private int judgeState(String str) {// 根据URL判断其状态。

		
		if (GlobleVar.BREED_ABL) {//如果蜘蛛有繁殖能力
			
			
			// 1.将http://www.sina.com/中的http://www.去掉
			// 2.然后判断是否start with web.
			
			//这里有3种情况：
			//1.http://www.sina.com
			//2.http://www.xxx.sina.com
			//3.http://xxx.xx.sina.com(这个还不能很好的处理).
			
			
			String str1 = str.replaceFirst("http://(www.)?", "");
			String curr="http://"+Thread.currentThread().getName();
			
			
			if(GlobleVar.SEEDS.contains(curr)){//如果是seeds派生出来的线程
				
				if (str1.startsWith(web)) {

					return URLSTOP;//这个地方需要再进行下一步判断。
				} else {
					return URLFORBID;
				}
			}else{//如果不是从seeds派生的线程
				
				if (str.indexOf(web) != -1) {

					return URLSTOP;

				} else {

					return URLFORBID;
				}
			}
		} else {//如果是爬行单一网站的话。http://www.xxx.cdut.edu.cn
			    //种子不繁殖。
		
			if (str.indexOf(web) != -1) {

				return URLSTOP;

			} else {

				return URLFORBID;
			}
		}

	}

	public String getLinkAfterFilter() {// 这个函数还需要好好考虑一下需要的段落。

		setState();// 先设置状态。

		if (linkfilter.getState() == URLPASS) {

			return linkfilter.getContent();

		}
		if (linkfilter.getState() == URLSTOP) {

			return linkfilter.getContent();
		}

		if (linkfilter.getState() == URLFORBID) {

			return null;
		}

		return null;
	}

	public void setState(int i) {// 这个函数主要屈就与MyLink类。

		linkfilter.setState(i);
	}

	public int getState() {

		setState();// 设置状态的时候再返回状态。

		return linkfilter.getState();// 这个地方有点错。这个地方必须设置成反应后的啊
	}

	public String getContent() {

		return getLinkAfterFilter();// 这个函数已经设置状态了。
	}

	
	
	
	public static void main(String[] args) {

		String str = "http://cdut.edu.cn/cdut/index.jsp?focusModuleId=f10856460921870000000000000000";

		
		//System.out.println(str.matches("http://(www.)?"));
		
		String str1 = str.replaceFirst("http://(www.)?", "");
		
		//!!!特别注意这个地方的使用replace完全不行啊!!!完全不知道为什么
		
		System.out.println(str1);

		if (str1.startsWith("cdut.edu.cn")) {

			System.out.println("aaaava");
		} else {
			System.out.println("bbbbbb");
		}

	}

}